Java Virtual Machine (JVM) হল Java প্রোগ্রামগুলির জন্য একটি সফটওয়্যার ইঞ্জিন যা Java bytecode কে machine code এ রূপান্তর করে এবং তা এক্সিকিউট করে। Bytecode হলো সেই intermediate code যা Java compiler দ্বারা তৈরি করা হয় এবং এটি একটি platform-independent কোড যা JVM দ্বারা যেকোনো প্ল্যাটফর্মে এক্সিকিউট করা যেতে পারে।
Bytecode এর মধ্যে অনেক instruction sets রয়েছে যা JVM দ্বারা কার্যকরী হয়। প্রতিটি bytecode instruction একটি নির্দিষ্ট কাজ সম্পাদন করে, যেমন অপারেশন চালানো, ডেটা স্থানান্তর, মেমরি পরিচালনা ইত্যাদি।
Bytecode এর প্রধান Instruction Set
Java bytecode একটি stack-based ভাষা, অর্থাৎ অধিকাংশ কমান্ড বা ইনস্ট্রাকশন একটি stack এর উপরে কাজ করে। এখানে কিছু সাধারণ এবং গুরুত্বপূর্ণ bytecode instruction এর বিবরণ দেওয়া হলো:
1. Load and Store Instructions
- এই ইনস্ট্রাকশনগুলি stack এ ডেটা লোড এবং স্টোর করার জন্য ব্যবহৃত হয়।
iload: একটি int টাইপ ভেরিয়েবলকে স্ট্যাকের উপর লোড করে।
iload 1 // Load the int from local variable 1 onto the stackistore: একটি int টাইপ ভেরিয়েবল স্ট্যাক থেকে স্থানীয় ভেরিয়েবলে স্টোর করে।
istore 1 // Store the top value from the stack into local variable 1aload: একটি অবজেক্ট রেফারেন্স স্ট্যাকের উপর লোড করে।
aload 2 // Load the object reference from local variable 2astore: একটি অবজেক্ট রেফারেন্স স্ট্যাক থেকে স্থানীয় ভেরিয়েবলে স্টোর করে।
astore 2 // Store the top object reference from the stack into local variable 2
2. Arithmetic Instructions
- এই ইনস্ট্রাকশনগুলি স্ট্যাকের উপর গাণিতিক অপারেশন সম্পাদন করে।
iadd: দুটি int মান যোগ করে।
iadd // Pop two integers from the stack and push the resultisub: দুটি int মান বিয়োগ করে।
isub // Pop two integers from the stack and push the resultimul: দুটি int মান গুণ করে।
imul // Pop two integers from the stack and push the resultidiv: দুটি int মান ভাগ করে।
idiv // Pop two integers from the stack and push the result
3. Comparison Instructions
- এই ইনস্ট্রাকশনগুলি স্ট্যাকের উপর প্রতিবন্ধক (comparison) অপারেশন চালায়।
if_icmpeq: দুটি int মান সমান কিনা তা পরীক্ষা করে।
if_icmpeq label // If the two ints are equal, jump to labelif_icmplt: দুটি int মানের মধ্যে ছোট হওয়ার পরীক্ষা।
if_icmplt label // If the first int is less than the second, jump to labelif_icmpgt: দুটি int মানের মধ্যে বড় হওয়ার পরীক্ষা।
if_icmpgt label // If the first int is greater than the second, jump to label
4. Stack Manipulation Instructions
- এই ইনস্ট্রাকশনগুলি স্ট্যাকের উপরে বিভিন্ন প্রক্রিয়া সম্পাদন করে।
swap: স্ট্যাকের উপর দুইটি উপাদান পরিবর্তন করে।
swap // Swap the top two values on the stackpop: স্ট্যাক থেকে একটি উপাদান সরিয়ে ফেলে।
pop // Remove the top element from the stack
5. Method Invocation and Return Instructions
- এই ইনস্ট্রাকশনগুলি মেথড কল এবং রিটার্নের জন্য ব্যবহৃত হয়।
invokestatic: একটি static method কল করে।
invokestatic #2 // Invoke static method at index 2 in the constant poolinvokevirtual: একটি instance method কল করে।
invokevirtual #3 // Invoke instance method at index 3 in the constant poolreturn: মেথডের রিটার্নের জন্য।
return // Return from the current methodireturn: একটি int মান রিটার্ন করে।
ireturn // Return an integer from the method
6. Control Flow Instructions
- এই ইনস্ট্রাকশনগুলি প্রোগ্রামের control flow পরিচালনা করে, যেমন লুপ বা কন্ডিশনাল স্টেটমেন্ট।
goto: নির্দিষ্ট লেবেলে ঝাঁপ দেয়।
goto label // Jump to the instruction at 'label'ifnonnull: যদি স্ট্যাকের উপরের ভ্যালু null না হয়, তবে একটি নির্দিষ্ট লেবেলে ঝাঁপ দেয়।
ifnonnull label // Jump to 'label' if the top value on the stack is non-nullifnull: যদি স্ট্যাকের উপরের ভ্যালু null হয়, তবে একটি নির্দিষ্ট লেবেলে ঝাঁপ দেয়।
ifnull label // Jump to 'label' if the top value on the stack is null
7. Object Creation and Manipulation Instructions
- এই ইনস্ট্রাকশনগুলি অবজেক্ট তৈরি এবং পরিচালনা করে।
new: একটি নতুন অবজেক্ট তৈরি করে।
new #4 // Create a new object of the class at index 4 in the constant poolcheckcast: একটি অবজেক্ট টাইপ কাস্টিং পরীক্ষা করে।
checkcast #5 // Cast the top object to the class at index 5 in the constant poolinstanceof: একটি অবজেক্টের টাইপ পরীক্ষা করে।
instanceof #6 // Check if the top object is an instance of the class at index 6
Java bytecode একটি stack-based ইন্সট্রাকশন সেট, যা JVM দ্বারা এক্সিকিউট হয়। Java এর bytecode instruction set বিভিন্ন ধরনের অপারেশন করে, যেমন গাণিতিক অপারেশন, তুলনা, স্ট্যাক ম্যানিপুলেশন, মেথড কল, এবং অবজেক্ট ম্যানিপুলেশন। এটি JVM কে প্ল্যাটফর্ম-স্বাধীন এবং কার্যকরভাবে Java প্রোগ্রাম চালানোর সুবিধা প্রদান করে।
Read more